public class MoveZeroes {
    public void moveZeroes(int[] nums) {
        // 定义两个指针分区域
        // 区域为
        // [0, left] [left + 1,  i - 1] [i, nums.length - 1]
        //  非0区间        0 区间           待处理区域
        int left = -1, i = 0;
        // 最终区域
        // [0, left]  [left + 1, nums.length - 1]
        //  非0区间       0区间
        while(i < nums.length) {
            if(nums[i] == 0) {
                i++;
            }else {
                // nums[i] != 0
                swap(nums, ++left, i++);
            }
        }
    }

    public void swap(int[] nums, int i, int j) {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
}
